package expressions;

import parsing.Parser;

public abstract class Prefix<T> extends ParentExpression<T>
{
    public Prefix(int arguments)
    {
        super(arguments);
    }

    public void parse(Parser<T> parser)
    {
        parser.addTopOperator(this);

        for (int i = 0; i < arguments; i++)
        {
            parseNextArgument(parser);
        }

        parser.buildTopOperator();
    }

    protected void parseNextArgument(Parser<T> parser)
    {
        do
        {
            parser.parseNextToken();
        }
        while (!parser.operatorExpected()
                || parser.getNextToken() instanceof Operator<?>);

        while (parser.topOperator() != this)
            parser.buildTopOperator();
        //
        // if (parser.getNextToken() instanceof Prefix<?>)
        // {
        // parser.parseNextToken();
        // }
        // else
        // {
        // while (parser.getNextToken() != null &&
        // !(parser.getNextToken() instanceof Prefix<?>))
        // {
        // parser.parseNextToken();
        // }
        //
        // while (parser.topOperator() != this)
        // parser.buildTopOperator();
        // }
    }
}
